﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

/// <summary>
/// Descripción breve de SolicitudesManager
/// </summary>
[WebService(Namespace = "temopuri.mx")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. 
// [System.Web.Script.Services.ScriptService]
public class SolicitudesManager : System.Web.Services.WebService {

    private SolicitudBL _solicitudBL = new SolicitudBL();
    private MailBL _mailBL = new MailBL();

    [WebMethod]
    [System.Xml.Serialization.XmlInclude(typeof(Solicitud))]
    public ResultObject GuardarSolicitud(Solicitud solicitud)
    {

        try
        {
            _solicitudBL.GuardarSolicitud(solicitud);

            return new ResultObject("ok", null);
        }
        catch (Exception ex)
        {
            return new ResultObject("No fue posible mandar el email", null);
        }
    }

    [WebMethod]
    public ResultObject BorrarSolicitud(long solicitudId, string motivo)
    {

        try
        {
            _solicitudBL.BorrarSolicitud(solicitudId, motivo);

            return new ResultObject("ok", null);
        }
        catch (Exception ex)
        {
            return new ResultObject("No fue posible mandar el email", null);
        }
    }

    [WebMethod]
    public List<string> ObtenerSolicitudes(string usuarioId)
    {
        return _solicitudBL.ObtenerSolicitudes(usuarioId);
    }

    [WebMethod]
    public List<string> ObtenerEmpleados(string usuarioId)
    {
        return _solicitudBL.ObtenerEmpleados(usuarioId);
    }

    [WebMethod]
    public List<string> ObtenerSolicitudesUsuario(string usuarioId)
    {
        return _solicitudBL.ObtenerSolicitudesUsuario(usuarioId);
    }

    [WebMethod]
    public string AsignarEncargado(long encargadoId, long solicitudId)
    {
        return _solicitudBL.AsignarEncargado(encargadoId, solicitudId);
    }

    [WebMethod]
    public string modificar(long solicitudId, int accion)
    {
        try
        {

            Mail mail = new Mail();
            MailManager mailManager = new MailManager();
            UsersManager userManager = new UsersManager();
            Solicitud solicitud = _solicitudBL.ObtenerSolicitud(solicitudId);

            mail.Asunto = "Cambio de estatus en solicitud";
            mail.Contenido = "Se realizo un cambio en la peticion del servicio: "+solicitud.Tipo;
            switch (solicitud.Estado)
            {
                case 1: mail.Contenido+= "\n Nuevo estatus: Pendiente."; break;
                case 2: mail.Contenido += "\n Nuevo estatus: Trabajo en proceso"; break;
                case 3: mail.Contenido += "\n Nuevo estatus: Cerrada"; break;
                case 4: mail.Contenido += "\n Nuevo estatus: Rechazada"; break;
                case 5: mail.Contenido += "\n Nuevo estatus: Aceptada"; break;
            }
            mail.FechaEnvio = new DateTime();
            mail.Para = userManager.ObtenerMail(solicitud.RecibidaPorId);
            mail.De = userManager.ObtenerUsuario(solicitud.EnviadaPorId);
            mail.DeId = solicitud.EnviadaPorId;
            mail.ParaId = solicitud.RecibidaPorId;

            mailManager.MandarMail(mail);
            mail.ParaId = solicitud.EnviadaPorId;
            mail.Para = userManager.ObtenerMail(solicitud.EnviadaPorId);
            mailManager.MandarMail(mail);

            if (_solicitudBL.ModificarSolicitud(solicitudId, accion).Equals("ok"))
                return "ok";
            else
                return "error";
        }
        catch (Exception e)
        {
            return "error";
        }
    }
    
}
